package com.gin.kotlin.no_gay_alliance.enums

import java.util.regex.Pattern

/**
 * 转发类型
 * @property pattern 文件名需要匹配的正则表达式
 * @property transform 将正则表达式匹配的group[1]转换为来源标注信息的方法
 * @constructor
 */
enum class RetweetType(
    private val pattern: Pattern,
    private val transform: (text: String) -> String,
) {
    /**
     * 非转发
     */
    NONE(Pattern.compile("(.+)"), { _ -> "" }),

    /**
     * Pixiv作品
     */
    PIXIV(Pattern.compile("(\\d+)_p\\d+"), { t -> "pix: $t" }),

    /**
     * 推特作品
     */
    TWITTER(Pattern.compile("(\\d{19})"), { t -> "https://x.com/i/status/$t" }),
    ;

    /**
     * 来源标注信息
     * @param filename String
     * @return String
     */
    fun getSource(filename: String): String {
        val matcher = pattern.matcher(filename)
        return if (matcher.find()) {
            matcher.group(1)?.let { transform.invoke(it) } ?: ""
        } else {
            ""
        }
    }

    companion object {
        /**
         * 根据文件名，返回来源标注信息
         * @param filename String
         * @return RetweetType
         */
        fun find(filename: String) = entries.map { it.getSource(filename) }.lastOrNull { it.isNotEmpty() } ?:""
    }
}